home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
sac
/
pack
/
lha211_s.exe
/
LIST.C
< prev
next >
Wrap
C/C++ Source or Header
|
1990-09-30
|
2KB
|
104 lines
/***********************************************************
list.c -- list files in archive
***********************************************************/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "lh.h"
static int filecount;
static long originalsize, packedsize;
void initlist(void)
{
filecount = originalsize = packedsize = 0;
if (flg_n == 0) {
printf(" Name Original Packed Ratio"
" Date Time Attr Type CRC\n");
printf("-------------- -------- -------- ------"
" -------- -------- ---- ----- ----\n");
}
}
static void expanddate(char *buf, time_t t, ulong org, ulong pac)
{
struct tm *tm;
int rt;
tm = localtime(&t);
rt = ratio(pac, org, 3);
sprintf(buf + 14, "%10lu%10lu %3d.%1d%% "
"%02d-%02d-%02d %02d:%02d:%02d",
org, pac, rt / 10, rt % 10,
tm -> tm_year % 100,
tm -> tm_mon + 1,
tm -> tm_mday,
tm -> tm_hour,
tm -> tm_min,
tm -> tm_sec);
}
void list(void)
{
char buf[79], *p, *q;
static char attr[7] = "ohs--a";
int i, j, k;
p = hpb.filename;
q = hpb.pathname;
if (flg_n == 0) {
memset(buf, ' ', 14);
expanddate(buf, hpb.utc, hpb.original, hpb.packed);
sprintf(buf + 59, " ---w %04X", hpb.filecrc);
memcpy(&buf[65], hpb.method, 5);
for (i = 0, j = 1; i < 6; i++, j <<= 1) { /* attributes */
if (hpb.attr & j) {
k = attr[i];
if (i <= 2) {
buf[63 - i] = k;
} else {
buf[60] = k;
}
}
}
if (hpb.level < 0) {
memset(&buf[71], '*', 4); /* if no CRC suppoted */
}
if (flg_x) {
puts(q); /* display in 2 lines */
} else {
if (p != q) { /* display in one line */
*buf = '+';
}
memcpy(&buf[2], p, strlen(p));
}
puts(buf);
filecount ++;
originalsize += hpb.original;
packedsize += hpb.packed;
} else {
if (flg_x) {
puts(q);
} else {
puts(p);
}
}
}
void endlist(time_t arctime)
{
char buf[79];
if (flg_n == 0) {
if (filecount) {
printf("-------------- -------- -------- ------"
" -------- --------\n");
sprintf(buf, " %3d files ", filecount);
expanddate(buf, arctime, originalsize, packedsize);
puts(buf);
} else {
printf(" no file\n");
}
}
}